<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 构造函数： 根据对象的属性，创建对象 动态的添加属性 返回这个对象、
        function Hero(name, age, sex, level) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.level = level;

            this.sing = function (address) {
                console.log('来' + address + '开演唱会');
            }
        }
        // 通过构造函数， 创建一个对象
        let lvbu = new Hero('吕布', 22, true, 18);
        let zf = new Hero('张飞', 18, true, 33);
        console.log(typeof lvbu); // 类型
        console.log(lvbu.name);
        lvbu.sing('郑州');



        /*
        总结：
            1. 构造函数就是类
            2.通过类这个模块，可以创造对象
            3.类是对象公共属性和方法的抽取

        */


        /*
        构造函数：
                1.构造函数作用： 创建对象
                2.返回值是一个对象 默认省略
                3.封装的代码是给对象多态的添加属性和方法
                4.this是当前对象
                5.命名用大驼峰
                6.配合使用关键字new使用
                7.构造函数和类是一码事
                8。就是对象公共属性和方法的抽取
                9.属性名和形参尽量保持一致，可读性强



                约定大于规范 规范大于编码
        
        */
    </script>
</body>

</html>